from Cell import Cell
from Entity import *


class Map(object) :
    def __init__ (self, rows, cols):
        """La carte est un tableau de cases, initialisees vide au depart. La carte est entouree d'eau."""
        self.tab = []
        for i in xrange(0, rows+2):
            self.tab.append([])
            for j in xrange(0,cols+2):
                self.tab[i].append(Cell(None))
                if ((i == 0) or (i == rows+1) or (j ==0) or (j==cols+1)) :
                    self.tab[i][j].updateSurface("WATER")
                else :
                    self.tab[i][j].updateSurface("GROUND")
                
    def setSurface (self, surf, row, col):
        """Modifie le type de sol a un endroit donne, des que le client en a connaissance."""
        self.tab[row+1][col+1].updateSurface(surf)

    def getSurface(self, row, col): 
        """Retourne le type de surface a un endroit donne. Uniquement la premiere lettre."""
        s = self.tab[row+1][col+1].getSurface()
        if s == 'GROUND' :
            return '_'
        elif s == 'WATER':
            return 'W'
        else : 
            return '?'
        
    def setEntity(self, ent, row, col):
        """Modifie l'entite presente a l'endroit donne.""" 
        self.tab[row+1][col+1].addEntity(ent)
        
    def getEntity(self, row, col):
        return self.tab[row+1][col+1].getEntity()
    
    def getIDEntity(self, row, col):
        if self.getEntityString(row, col) == '-' :
            return -1
        else : 
            return self.tab[row+1][col+1].getEntity().getId()
    
    def removeEntity(self, row, col): 
        self.tab[row+1][col+1].removeEntity()
        
    def getEntityString(self, row, col):
        """Retourne la premiere lettre de l'entite presente a la case donnee"""
        e = self.tab[row][col].getEntity()
        if type(e) == type(Zombie(0)) :
            return 'Z'
        elif type(e) == type(Berzerk()) : 
            return 'B'
        elif type(e) == type(Human()) : 
            return 'H'
        else :
            return '-'

    """def moveEntity(self, row, col, direction):
        Deplace l'entite presente a un endroit donne, vers une direction donnee. Ne bouge pas si le deplacement est impossible
        newRow = row
        newCol = col
        if direction == 'N' :
            newRow -= 1
        elif direction == 'W' :
            newCol -=1
        elif direction == 'S' :
            newRow += 1
        elif direction == 'E' :
            newCol += 1
        else :
            print "Error (direction)"
            
        if self.tab[newRow][newCol].getSurface() != 'WATER' :
            ent = self.tab[row][col].getEntity()
            self.tab[newRow][newCol].addEntity(ent)
            self.tab[row][col].removeEntity()
            return "zombie %d %d %d" % (id, newRow, newCol)
        else :
            print "Entity won't move" """
        